package de.fhtrier.gdw2.ships.game.entities;

import java.util.ArrayList;

import org.newdawn.slick.Image;
import de.fhtrier.gdw2.ships.game.Player;
import de.fhtrier.gdw2.ships.game.interfaces.IDuplicateable;
import de.fhtrier.gdw2.ships.game.modules.Module;


/**
 * Alles, was in der World gerendert wird und aus Komponenten besteht.
 * @author Wendelin
 *
 */
public abstract class Entity implements IDuplicateable {

	/**Liste der Module eines Entity*/
	protected ArrayList<Module> modules;
	/**Besitzer des Entity*/
	private Player owner;		//net Gaia vergessen als player NULL
	/**Ausrichtung des Entity - 0..360 degree C*/
	private int direction;
	/**x-positon in der World*/
	private double pos_X;
	/**y-position in der World*/
	private double pos_Y;	
	/**Zugehöriges Bild*/
	private Image pic;
	/**Name, der als Typenname im Contextmenü angezeigt wird. Zb. 'Asteroid' oder 'Fighter'*/
	private String typeName;
	
	private float radius;
	/**Letzter Auftrag des Spielers*/
	private Target target;
	
	 public Entity(int direction, double d, double e, Image i)
	 {
		 this.direction = direction;
		 setX(d);
		 pos_Y = e;
		 setPic(i);
		 modules = new ArrayList<Module>();
		 this.typeName = "HUGO";
		 setRadius(70);
	 }
	 

	 /**
	  * 
	  * dupliziert den Aufrufer und gibt ein Entity zurück
	  * @author Wendelin
	  * 
	  */	 
	 
	public ArrayList<Module> getModules()
	{
		return modules;
	}
	
	public int getDirection()
	{
		return direction;
	}	
	
	public void setDirection(int theta)
	{
		direction = theta;
		
	}


	public double getX()
	{
		return pos_X;
	}
	
	public double getY()
	{
		return pos_Y;
	}

	public Image getPic() {
		return pic;
	}

	public void setPic(Image pic) {
		this.pic = pic;
	}

	public void addModule(Module m) {
		modules.add(m);
	}



	/**dreht das Entity um i degree.*/
	public void rotate(int i)
		{
			this.direction += i;
			this.direction %= 360;
		}

	public void setX(double d)
		{
				this.pos_X = d;
		}

	public void setY(double d)
		{
				this.pos_Y = d;
		}

	public String getTypeName()
		{
				return typeName;
		}

	public void setTypeName(String typeName)
		{
				this.typeName = typeName;
		}


	public float getRadius()
		{
				return radius;
		}


	public void setRadius(float radius)
		{
				this.radius = radius;
		}


	public Target getTarget()
		{
				return target;
		}


	public void setTarget(Target target)
		{
				this.target = target;
				
		}
}
